package com.atguigu.spzx.manager.helper;

import com.atguigu.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * 采用递归算法，要实现菜单父子关系组装。
 */
public class MenuHelper {
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {

        List<SysMenu> parentMenu = new ArrayList<>();
        for (SysMenu sysMenu : sysMenuList) {
            if(sysMenu.getParentId().longValue() == 0){
                parentMenu.add(findChildren(sysMenu,sysMenuList));
            }
        }
        return parentMenu;
    }

    /**
     * 递归：
     *      1.大的问题、逐步拆分小的问题、直到小的问题可以直接解决。大问题和小问题是同样的问题。
     *      2.必须有出口
     *
     *      递推、回归
     * @param sysMenu
     * @return
     */
    private static SysMenu findChildren(SysMenu sysMenu,List<SysMenu> menuList) {

        sysMenu.setChildren(new ArrayList<>()); //给children属性初始化

        for (SysMenu menu : menuList) {
            if(sysMenu.getId().longValue() == menu.getParentId().longValue()){ //找孩子
                sysMenu.getChildren().add(findChildren(menu,menuList));
            }
        }

        return sysMenu;
    }


}
